package main

import (
	"fmt"
	"sync"
	"time"
)

var total int
var wg sync.WaitGroup
var rwLock sync.RWMutex

//互斥锁，读写锁 同步数据 能不用锁就别用锁--性能
//绝大多数的web系统来说 都是读多写少
//有1w个人同时读数据库 A读的时候B能读妈？
//为什么要加锁？一定要加锁，写上和读上面加同一把锁
//并发严重下降，B读了一个数据，不会对C读数据产生影响，一定是读和写之间造成的
//如果这边锁可以做到 读之间不会相互影响 ，写和读之间才会产生影响 那多好 读写锁
func read() {
	defer wg.Done()
	rwLock.RLock()
	fmt.Println("开始读数据")
	time.Sleep(time.Second)
	fmt.Println("读取成功")
	rwLock.RUnlock()

}
func write() {
	defer wg.Done()
	rwLock.Lock()
	fmt.Println("开始修改数据")
	time.Sleep(time.Second * 10)
	fmt.Println("修改成功")
	rwLock.Unlock()
}
func main() {
	wg.Add(6)
	for i := 0; i < 5; i++ {
		go read()
	}
	for i := 0; i < 1; i++ {
		go write()
	}
	wg.Wait()
	fmt.Println(total)
}
